package net.jgrm.product.utils;

import org.springframework.util.DigestUtils;

import java.math.BigDecimal;
import java.nio.charset.StandardCharsets;
import java.util.Collection;
import java.util.stream.Collectors;

/**
 * 缓存键生成器，用于生成稳定且唯一的缓存键
 */
public class CacheKeyGenerator {


    /**
     * 对集合进行排序并拼接成字符串
     *
     * @param collection 集合
     * @return 排序并拼接后的字符串
     */
    private static String sortAndJoin(Collection<String> collection) {
        return collection.stream()
                .sorted()
                .collect(Collectors.joining(","));
    }

    /**
     * 为附近充电站查询生成缓存键
     *
     * @param latitude  纬度
     * @param longitude 经度
     * @param distance  距离（公里）
     * @return 生成的缓存键
     */
    public static String generateNearbyStationsKey(BigDecimal latitude, BigDecimal longitude, Double distance) {
        if (latitude == null || longitude == null || distance == null) {
            throw new IllegalArgumentException("Latitude, longitude and distance cannot be null");
        }

        // 设置固定精度以避免小数精度问题
        StringBuilder keyBuilder = new StringBuilder();
        keyBuilder.append("nearby_");
        keyBuilder.append("lat_").append(latitude.setScale(6, BigDecimal.ROUND_HALF_UP));
        keyBuilder.append("_lng_").append(longitude.setScale(6, BigDecimal.ROUND_HALF_UP));
        keyBuilder.append("_dist_").append(String.format("%.2f", distance));

        // 使用MD5哈希确保键的长度合理
        return DigestUtils.md5DigestAsHex(keyBuilder.toString().getBytes(StandardCharsets.UTF_8));
    }


}